# CUDA 工具链
NVCC := nvcc

# 编译选项
CUDA_FLAGS := -std=c++17
DEBUG_FLAGS := -g -G
OPT_FLAGS := -O0
WARN_FLAGS := 

# 默认编译标志
CUDA_FLAGS += $(OPT_FLAGS) $(WARN_FLAGS)

# 如果是调试模式，添加调试标志
ifeq ($(DEBUG),1)
	CUDA_FLAGS += $(DEBUG_FLAGS)
endif

# CUDA 库链接
CUDA_LIBS := -lcudart


# 查找所有 .cu 和 .cpp 文件
SOURCES := $(wildcard *.cu *.cpp)

# 生成目标文件名（去除扩展名）
TARGETS := $(basename $(SOURCES))

# 默认目标
all: $(TARGETS)

# 编译规则
%: %.cu
	$(NVCC) $(CUDA_FLAGS) $(INCLUDES) -o $@ $< $(LIB_DIRS) $(CUDA_LIBS)

%: %.cpp
	$(NVCC) $(CUDA_FLAGS) $(INCLUDES) -o $@ $< $(LIB_DIRS) $(CUDA_LIBS)

# 清理生成的文件
clean:
	rm -f $(TARGETS)

# 重新编译
rebuild: clean all

# 显示变量信息（用于调试）
info:
	@echo "Sources: $(SOURCES)"
	@echo "Targets: $(TARGETS)"
	@echo "NVCC: $(NVCC)"
	@echo "CUDA_FLAGS: $(CUDA_FLAGS)"

.PHONY: all clean rebuild info